// app.js
App({
  onLaunch: function () {
    // 初始化云开发环境
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        env: 'cloud1-3gx6l86f6bc4d2af',
        traceUser: true,
      })
    }

    // 检查登录状态
    this.checkLoginStatus();

    // 初始化购物车数据，确保存在有效的数据结构
    try {
      const cartList = wx.getStorageSync('cartList');
      if (!cartList || !Array.isArray(cartList)) {
        wx.setStorageSync('cartList', []);
      }

      // 检查购物车数据中是否有无效项
      if (Array.isArray(cartList) && cartList.length > 0) {
        const validCartList = cartList.filter(item =>
          item && typeof item === 'object' &&
          item.id &&
          typeof item.quantity === 'number'
        );

        if (validCartList.length !== cartList.length) {
          wx.setStorageSync('cartList', validCartList);
          console.log('已清理购物车中的无效数据项');
        }
      }
    } catch (error) {
      console.error('购物车数据初始化错误:', error);
      // 出错时重置购物车
      wx.setStorageSync('cartList', []);
    }

    // 捕获全局未处理的异常
    wx.onError(function (error) {
      console.error('捕获到全局异常：', error);
      // 可以在这里上报错误到服务器
    });

    // 添加全局异常处理
    this.handleGlobalException();
  },

  // 检查登录状态
  checkLoginStatus() {
    // 检查是否已登录
    const openid = wx.getStorageSync('openid');
    const userInfo = wx.getStorageSync('userInfo');

    if (openid && userInfo) {
      console.log('检测到用户已登录:', openid);
      this.globalData.isLoggedIn = true;
      this.globalData.openid = openid;
      this.globalData.userInfo = userInfo;

      // 静默更新登录状态，确保会话有效
      this.silentLogin();
    } else {
      console.log('用户未登录');
      this.globalData.isLoggedIn = false;
    }
  },

  // 静默更新登录状态
  silentLogin() {
    // 调用云函数检查登录状态
    wx.cloud.callFunction({
      name: 'login',
      data: {}
    })
      .then(res => {
        if (res.result && res.result.success) {
          // 更新全局数据
          this.globalData.openid = res.result.openid;

          // 更新存储
          wx.setStorageSync('openid', res.result.openid);

          console.log('静默登录成功，会话有效');
        } else {
          console.log('静默登录失败，需要用户重新登录');
        }
      })
      .catch(err => {
        console.error('静默登录失败:', err);
      });
  },

  // 全局数据空值检查工具函数
  safeGet: function (obj, path, defaultValue = null) {
    try {
      const keys = path.split('.');
      let result = obj;
      for (let key of keys) {
        if (result === null || result === undefined || typeof result !== 'object') {
          return defaultValue;
        }
        result = result[key];
      }
      return result === undefined ? defaultValue : result;
    } catch (e) {
      return defaultValue;
    }
  },

  // 全局异常处理
  handleGlobalException: function () {
    // 拦截页面错误
    const originalPage = Page;
    Page = function (config) {
      // 为每个页面的onLoad添加错误处理
      const originalOnLoad = config.onLoad;
      config.onLoad = function (options) {
        try {
          if (typeof originalOnLoad === 'function') {
            originalOnLoad.call(this, options);
          }
        } catch (error) {
          console.error('页面onLoad错误:', error);
          wx.showToast({
            title: '页面加载出错',
            icon: 'none'
          });
        }
      };

      // 返回处理后的页面配置
      return originalPage(config);
    };
  },

  globalData: {
    userInfo: null,
    isLoggedIn: false,
    openid: ''
  }
})
